[pull] main from QuantumNous:main - #69
Merged
Merged
Conversation
Previously, the Playground UI allowed users to pick a group, but the request body sent to `/pg/chat/completions` did not include this information, so the backend always fell back to the user’s default group. Changes introduced • web/src/helpers/api.js – added `group: inputs.group` to the `payload` built in `buildApiPayload`. Outcome • Selected group is now transmitted to the backend, enabling proper channel routing and pricing logic based on group ratios. • Resolves the issue where group selection appeared ineffective in the Playground.
… multi-to-single mode WHY • Backend (0089157) now accepts structured request `{ mode, channel }`, including new `multi_to_single`. • Need front-end to upload multiple service-account JSON files and generate correct `channel.key`. • Improve UX: avoid red “uploadFail” state and offer drag-and-drop UI. WHAT 1. EditChannel.js • Added Upload drag-area with IconBolt; `uploadTrigger="custom"`. • `handleJsonFileUpload` reads file, pushes content to `jsonFiles`, returns `{ shouldUpload:false, status:'success' }`. • New states: `batch`, `mergeToSingle`, `jsonFiles`. • Dynamic mode resolver: `single` | `batch` | `multi_to_single`. • Builds `channel.key` as JSON-object whose keys are the raw credential texts. • UI: – “Batch create” checkbox (new build only). – Nested “Merge to single channel (multi-key mode)” checkbox enabled when batch=true. – Real-time file count display. 2. Upload UX • Drag-and-drop, accepts `.json,application/json`. • Custom texts: “Click or drop files here” / “JSON credentials only”. • Eliminated mandatory `action` warning (`action="#"`). 3. Misc • Included IconBolt import. • Safeguard toggles reset logic to prevent stale state. RESULT Front-end now fully aligns with enhanced AddChannel API: • Supports Vertex AI multi JSON batch creation. • Supports new `multi_to_single` flow. • Clean user feedback with successful file status.
# Conflicts: # controller/channel.go # docker-compose.yml # web/src/components/table/ChannelsTable.js # web/src/pages/Channel/EditChannel.js
….ChannelTypeVertexAi
…ion for multi-key channels
… settings
Summary
-------
1. Vertex AI JSON key upload
• Accept multiple `.json` files (drag & drop / click).
• Parse each `fileInstance`; build valid key array.
• Malformed files are skipped and collected into **one** toast message.
• Upload list now仅displays valid files; form state (`vertex_files`) 同步保持.
• On *Submit* keys are re-parsed to prevent async timing loss.
2. Multi-key mode stability
• Added `multi_key_mode: "random"` to initial form values.
• `Form.Select` becomes fully controlled (`value`/`onChange`).
• Toggling the “multi-key mode” checkbox writes default / removes field, so
`setValues(inputs)` no longer clears the user’s choice.
3. UX / compatibility tweaks
• Preserve uploaded files when editing any other field.
• Use `fileInstance` only – compatible with legacy Semi Upload API.
• Removed redundant `limit` prop on `Form.Upload`.
• Aggregated error handling avoids toast spam.
Result
------
Channel creation/update now supports:
• Reliable batch import of Vertex AI service-account keys.
• Consistent retention of multi-key strategy (`random` / `polling`).
• Cleaner, user-friendly error feedback.
…correct Vertex-AI key storage**
Summary
1. **model/channel.go**
• Replaced the pointer-only `Value()` with a value-receiver implementation
• GORM can now marshal both `ChannelInfo` and `*ChannelInfo`, eliminating
`unsupported type model.ChannelInfo` runtime error.
2. **controller/channel.go**
• Refactored `getVertexArrayKeys()` – every element is now
- passed through `json.Marshal` when not already a string
- trimmed & validated before insertion
• Guarantees each service-account key is persisted as a **pure JSON string**
instead of the previous `map[...]` dump.
Result
• Channel creation / update succeeds without SQL driver errors.
• Vertex-AI batch & multi-key uploads are stored in canonical JSON, ready for
downstream SDKs to consume.
Summary 1. Load `channel_info` when editing: • Detect if the channel is in multi-key mode (`is_multi_key`). • Auto-initialize `batch`, `multiToSingle`, and `multiKeyMode` from backend data. 2. Visibility logic • Creation page: “Batch create / Multi-key mode” always available. • Edit page: show these controls **only when** the channel itself is multi-key. 3. State consistency • `multi_key_mode` added to `inputs`; `setValues(inputs)` now preserves the user’s selection. Result Single-key channels no longer display irrelevant “key aggregation” options, while multi-key channels open with the correct defaults, providing a cleaner and more accurate editing experience.
feat: add video channel kling swag
This commit refactors the application's error handling mechanism by introducing a new standardized error type, `types.NewAPIError`. It also renames common JSON utility functions for better clarity. Previously, internal error handling was tightly coupled to the `dto.OpenAIError` format. This change decouples the internal logic from the external API representation. Key changes: - A new `types.NewAPIError` struct is introduced to serve as a canonical internal representation for all API errors. - All relay adapters (OpenAI, Claude, Gemini, etc.) are updated to return `*types.NewAPIError`. - Controllers now convert the internal `NewAPIError` to the client-facing `OpenAIError` format at the API boundary, ensuring backward compatibility. - Channel auto-disable/enable logic is updated to use the new standardized error type. - JSON utility functions are renamed to align with Go's standard library conventions (e.g., `UnmarshalJson` -> `Unmarshal`, `EncodeJson` -> `Marshal`).
# Conflicts: # controller/channel.go # middleware/distributor.go # model/channel.go # model/user.go # model/user_cache.go # relay/common/relay_info.go
This commit brings System Settings in line with Payment Settings and
prepares the whole component for multi-language deployments.
Key points
----------
• Introduced a “General Settings” card in `SystemSetting.js`
- Adds a `ServerAddress` field (copied from Payment Settings).
- Explains that this URL is used for payment callback & default homepage.
- Implements `submitServerAddress` to persist the option.
• Internationalisation
- Imported `useTranslation` and wrapped **all** Chinese UI strings in `t()`.
- Localised section titles, labels, placeholders, banners, buttons,
modal texts and toast messages.
- Dynamic banner/tool-tip descriptions now combine `t()` fragments with
template literals for runtime URLs.
• UX improvements
- Added contextual `extraText` under the ServerAddress input.
- Ensured placeholders like “sensitive info…” are translatable.
With these changes, administrators can configure the server URL from the
System Settings tab, and the entire page is ready for seamless language
switching via the existing i18n framework.
…sed error handling
Summary
• **EditChannel.js**
– Displays “Fetch Model List” button for both *create* and *edit* modes (removed `isEdit` guard).
– Unified model selector placeholder to “Please choose supported models”.
– Added null-safety checks when parsing Axios responses.
– Sends requests with `{ skipErrorHandler: true }`, preventing generic *500 Internal Server Error* toasts and relying on context-specific messages instead.
• **helpers/api.js**
– Introduced `skipErrorHandler` flag in the Axios response interceptor.
If present, global `showError` is bypassed, giving callers full control over user-facing notifications.
– Ensures `Promise.reject(error)` is returned for proper error propagation.
Why
Channel creators now enjoy the same convenience as editors when importing upstream model lists.
Meanwhile, suppressing redundant toasts removes confusion caused by simultaneous custom and generic error messages.
…l settings Summary • **en.json** – Added translation for “是否自动禁用” → “Whether to automatically disable”. – Stubbed/added key for helper text “仅当自动禁用开启时有效,关闭后不会自动禁用该渠道” (translation placeholder left for future update). Why These keys were previously untranslated, causing mixed-language UI for the “Auto Disable” toggle in the channel edit form. Filling them (or at least registering the keys) ensures consistent localization and prevents runtime fallbacks.
…c Info card for smoother channel setup
Summary
• **EditChannel.js**
– Relocated the following conditional inputs from “Advanced Settings” to the initial “Basic Info” card:
• Model version (type 18)
• Deployment region (type 41)
• Knowledge-base ID (type 21)
• Account ID (type 39)
• Agent ID (type 49)
• OpenAI organization (type 1)
– No functional changes; layout only.
Why
These fields are commonly filled during the first steps of channel creation. Surfacing them earlier reduces scrolling and streamlines the user workflow.
… data consistency
…CNY selector * Introduced `showWithRecharge` switch in the actions bar to display model prices based on recharge cost. * Added a `Select` dropdown (USD / CNY) that appears only when the recharge-price mode is enabled. * Implemented `displayPrice()` helper to: * Convert USD prices to recharge prices using `status.price` and `status.usd_exchange_rate`. * Format output according to the selected currency. * Updated price rendering for both quota types to use the new helper and respect K/M unit conversion. * Removed the old currency switch from the header, retaining only the K/M unit toggle. * Extended `SearchAndActions` memo dependencies; imported `Select` from Semi UI. * Minor refactors and comment clean-up. No breaking changes.
…rontend Backend - setting/payment.go: introduce default `USDExchangeRate` (7.3) - model/option.go: • inject `USDExchangeRate` into `InitOptionMap` • persist & sync value in `updateOptionMap` - controller/misc.go: expose `usd_exchange_rate` via `/api/status` Frontend - OperationSetting.js & SettingsGeneral.js: • extend state/inputs with `USDExchangeRate` • add form field “美元汇率 (non-top-up rate, pricing only)” - ModelPricing.js already consumes `status.usd_exchange_rate`; no change needed API - Administrators can update the rate via `PUT /api/option` (key: `USDExchangeRate`) - All clients receive the latest rate through `GET /api/status` This closes the end-to-end flow for displaying model prices in both USD and CNY based on a configurable exchange rate.
A new Markdown file `docs/api/web_api.md` has been added that documents all backend REST endpoints used by the Web UI. Details: • Lists every `/api`, `/dashboard`, and `/v1/dashboard` route relevant to the Web front-end • Excludes every Relay-specific path to keep scope focused on Web operations • Groups endpoints by functional module (initialisation, public info, user, channel, token, logging, etc.) • Specifies HTTP method, path, required auth level, and concise description for each entry • Includes an auth-level legend and update-date placeholder for future maintenance No application logic was modified; this is documentation-only and improves developer onboarding and API discoverability.
feat: 增加即梦生图功能
fix: KlingText2VideoRequest image and model_name
fix: default request ID to 'SYSTEM' for background tasks
feat: video priority use origin model name
fix: mySQL does not support default false
🔧 refactor(user_usable_group): enhance concurrency control with mutex…
Add stripe support and fix wrong top up loading state
…or categorization
… in multiple handlers
…se64 fix: ali embedding support base64
…r better database performance
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
See Commits and Changes for more details.
Created by
pull[bot] (v2.0.0-alpha.3)
Can you help keep this open source service alive? 💖 Please sponsor : )